package com.udg.goodmorning.tweet;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.Window;
import android.view.WindowManager;

/**
 * 鳴動を行う。<br>
 * 設定値に従い、鳴動処理を行う。
 * @author Ippei Shimobou
 *
 */
public class MorningCall extends Activity {
	private TelephonyManager tm;
	private Uri uri_alarm = null;
	private static MorningCallPlayer CallingView;
	private String title;
	private String message;


	// private int mVolume; // 消えるかも　上中

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		requestWindowFeature(android.view.Window.FEATURE_NO_TITLE);

		final Window win = getWindow();
		win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
				| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
				| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
				| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

		/* for Phone Event */
		// 鳴動中に電話がかかってきた場合のイベントをセット
		tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);

		/* Get Preference */
		SharedPreferences sp = getSharedPreferences(getPackageName()
				+ "_preferences", MODE_PRIVATE);
		String url = sp.getString(Utility.KEY_ALARM_TITLE, "");
		if(url.equals("")){
			/* サイレント */
			uri_alarm = null;
		}else{
			/* 音設定あり */
			uri_alarm = Uri.parse(url);
		}

		CallingView = new MorningCallPlayer(this,uri_alarm);

	}

	@Override
	protected void onResume(){
		super.onResume();
		// 音鳴らす
		CallingView.playCall();

		//ダイアログに表示するタイトルとメッセージを取得
		title = getIntent().getStringExtra("text_title");
		message = getIntent().getStringExtra("text_Message");
		// ダイアログ生成
		showDialog(this, title, message);
	}


	private static void showDialog(final Activity activity, final String title,
			final String message) {
		// ダイアログにて表示するもの
		// メンション相手
		// メンションでのメセージ
		// 「起きたよ」ボタン（目覚まし停止）
		// 「あと５分...」ボタン（スヌーズ機能）
		AlertDialog.Builder morningDialog = new AlertDialog.Builder(activity);
		morningDialog.setTitle(title);
		morningDialog.setMessage(message);
		morningDialog.setCancelable(false);
		morningDialog.setPositiveButton(R.string.tweet,
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						// 目覚まし停止
						// 音を止める
						// サービスも止める
						// ツイート画面へ遷移させる
						CallingView.stopCall();

						Intent toMention = new Intent(activity, TweetForm.class);
						toMention.putExtra("text_title", title);
						activity.startActivity(toMention);

						activity.finish();
					}
				});
		morningDialog.setNegativeButton(R.string.stop,
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						// スヌーズ機能
						// 音は止めるがサービスは止めない
						// 自動で「あと５分...」をリメンションする？
						// もしくは自動で「@自分 おはよー」をつぶやくことで、次のサービス起動時にまた音鳴らすようにする？
						CallingView.stopCall();

						activity.finish();
					}
				});
		morningDialog.create();
		morningDialog.show();
	}

	/* When Phone is calling, Ring stop */
	PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
		@Override
		public void onCallStateChanged(int state, String number) {
			phoneCallEvent(state, number);
		}

		/**
		 * 着信のため鳴動を停止する。
		 * @param state 着信状態
		 * @param number 着信番号
		 */
		private void phoneCallEvent(int state, String number) {
			switch (state) {
			case TelephonyManager.CALL_STATE_RINGING:
				CallingView.stopCall();
				break;
			default:
				break;
			}
		}
	};

	@Override
	protected void onPause(){
		super.onPause();
		CallingView.stopCall();
		
		TWakeCallMain.klock.reenableKeyguard();
	}
}
